﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CRCDesktop.org.h1.crcDesktop.util;
using CRCDesktop.org.h1.crcDesktop.basicClasses;

namespace CRCDesktop.org.h1.crcDesktop.dao
{
    class DAOConsultarConfig
    {
        String[] linha; 
        BibliotecaFuncoes bibliotecaFuncoes;
        Config config;

        public DAOConsultarConfig() {
            bibliotecaFuncoes = new BibliotecaFuncoes();
            //this.sensor = new Array[5];
        }

        public Config consultar()
        {
            int idUsuario = 0;
            int idCasa = 0;
            int socketPort = 0;
            string linhaDispositivos = "";
            int[] dispositivos = null;
            string[,] sensor = null;
            
            try
            {
                //Carrega arquivo do diretório passado como paramentro.
                this.linha = System.IO.File.ReadAllLines(@"C:\crc\crc.conf");
                
                //Pega no arquivo as informações necessarias
                idUsuario = Convert.ToInt16(linha[0]);
                idCasa = Convert.ToInt16(linha[1]);
                socketPort = Convert.ToInt16(linha[2]);
                

                //Pega no arquivo os todos os dispositivos conectados e os colaca em um array
                linhaDispositivos = linha[3];
                int numDispositivos = 0;
                char[] arrayString = linhaDispositivos.ToCharArray();
                
                //Realiza verificação para saber a quantidade de posições do array.
                for (int i = 0; i < arrayString.Length;  i++)
                {
                    if (!arrayString[i].ToString().Equals("-"))
                    {
                       numDispositivos += 1;
                    }
                }

                //Instancia do array de disposiitivos com a qtd exata de posições.
                dispositivos = new int[numDispositivos];
                String[] dispositivosText = this.bibliotecaFuncoes.captureFourString(linhaDispositivos, numDispositivos);

                for (int i = 0; i < dispositivosText.Length; i++)
                {
                    //Realiza a conversão para int[] e seta na variável correspondente.
                    dispositivos[i] = int.Parse(this.bibliotecaFuncoes.captureFourString(linha[3], 5)[i]);
                }

                //Pega todos os sensores e coloca em um Array Bidimensional[i,j].
                
                //Quantidade d sensores cadastrados
                int qtdSensor = new string[linha.Length - 4].Length;
                
                //Instancia do array que por padrão terá sempre 2 colunas [porta, dispositivo]
                sensor = new string[qtdSensor,2];
                
                string[] sensorValues = new string[2];

                for (int i = 0; i < qtdSensor; i++)
                {
                    //Carrega em um array de duas posições as informações do sensor[]{porta, dispositivo}
                    sensorValues = this.bibliotecaFuncoes.captureFourString(linha[i + 4], 2);

                    for (int j = 0; j < 2; j++)
                    {
                        //Carregamento do array bidimencional com as informações 
                        //dos sensores.
                        sensor[i, j] = sensorValues[j];
                    }
                  
                }

                // Instancia um objeto Config para passar os paramentros retornados na consulta
                config = new Config();
                config.IdUsuario = idUsuario;
                config.IdCasa = idCasa;
                config.SocketPort = socketPort;
                config.Dispositivos = dispositivos;
                config.Sensores = sensor;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            return config;
        }
    }
}
